﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CondominioG1.Persistencia.NHibernate;
using CondominioG1.Dominio;

namespace CondominioG1.Negocio
{
    public class ResidenteService
    {
        // No hay dependencias, utilizamos las DAO ya definidas en forma directa

        // Mapeo de funcionalidades
        public Residente RegistrarResidente(String Codigo
                                    , String Nombres
                                    , String Apellidos
                                    , Int32 Edad
                                    , String Correo
                                    , String Clave
                                    , String Tipo
                                    )
        {
            // Validación de NOMBRES
            if (null == Nombres || String.Empty.Equals(Nombres))
                throw new Exception("El dato NOMBRE es obligatorio");
            // Validación de APELLIDOS
            if (null == Apellidos || String.Empty.Equals(Apellidos))
                throw new Exception("El dato APELLIDOS es obligatorio");
            // Validación de CORREO
            if (null == Correo || String.Empty.Equals(Correo))
                throw new Exception("El dato CORREO es obligatorio");
            // Validación de CLAVE
            if (null == Clave || String.Empty.Equals(Clave))
                throw new Exception("El dato CLAVE es obligatorio");

            // Generar nueva secuencia para Residente
            ResidenteDAO ResidenteDAO = new ResidenteDAO();

            Residente Residente = new Residente();
            //Residente.Codigo = Convert.ToInt32(ResidenteDAO.ObtenerID());
            Residente.Codigo = Codigo;
            Residente.Nombres = Nombres;
            Residente.Apellidos = Apellidos;
            Residente.Edad = Edad;
            Residente.Correo = Correo;
            Residente.Clave = Clave;
            Residente.Tipo = Tipo;

            Residente ResidenteCreado = ResidenteDAO.Crear(Residente);
            return ResidenteCreado;
        }

        public Residente ModificarResidente(String Codigo
                                       , String Nombres
                                       , String Apellidos
                                       , Int32 Edad
                                       , String Correo
                                       , String Clave
                                       , String Tipo
                                       )
        {
            // Validacion de existencia de Residente
            ResidenteDAO ResidenteDAO = new ResidenteDAO();
            Residente ResidenteExistente = ResidenteDAO.Obtener(Codigo);
            if (null == ResidenteExistente)
                throw new Exception("El Residente NO EXISTE...");

            // Validación de NOMBRES
            if (null == Nombres || String.Empty.Equals(Nombres))
                throw new Exception("El dato NOMBRE es obligatorio");
            // Validación de APELLIDOS
            if (null == Apellidos || String.Empty.Equals(Apellidos))
                throw new Exception("El dato APELLIDOS es obligatorio");
            // Validación de CORREO
            if (null == Correo || String.Empty.Equals(Correo))
                throw new Exception("El dato CORREO es obligatorio");
            // Validación de CLAVE
            if (null == Clave || String.Empty.Equals(Clave))
                throw new Exception("El dato CLAVE es obligatorio");

            Residente Residente = new Residente();
            Residente = ResidenteExistente;
            Residente.Nombres = Nombres;
            Residente.Apellidos = Apellidos;
            Residente.Edad = Edad;
            Residente.Correo = Correo;
            Residente.Clave = Clave;
            Residente.Tipo = Tipo;

            Residente ResidenteModificado = ResidenteDAO.Modificar(Residente);
            return ResidenteModificado;
        }

        public Residente EliminarResidente(String Codigo)
        {
            // Validacion de existencia de Residente
            ResidenteDAO ResidenteDAO = new ResidenteDAO();
            Residente ResidenteExistente = ResidenteDAO.Obtener(Codigo);
            if (null == ResidenteExistente)
                throw new Exception("El Residente NO EXISTE...");

            Residente Residente = new Residente();
            Residente = ResidenteExistente;

            ResidenteDAO.Eliminar(Residente);
            return Residente;
        }
    }
}
